/*电梯调度算法*/

/*
	SCAN主函数
	参数：
		arr原磁道序列数组，head磁头位置
	算法描述：
		默认先从较大的磁道开始计算
*/

function SCAN(arr, head){
	var arrSrc = arr.slice();//拷贝原数组
	var arrProc = [];//寻道过程
	var arrSeNum = [];//每一次的寻到次数
	var aver = 0;//记录平均值
	var length = arrSrc.length;//记录数组的长度
	var now = head;//记录当前的磁道

	arrSrc.sort(function(m, n){
		if(m > n) return 1;
		else if(m < n) return -1;
		return 0;
	});

	var k=0; 
	while(arrSrc[k] < now){
		k++;
	}
	var left = k-1;
	var right = k;
	while(right < length){
		arrSeNum.push(Math.abs(now - arrSrc[right]));
		aver += Math.abs(now - arrSrc[right]);
		now = arrSrc[right];
		arrProc.push(now);
		right++;
	}
	while(left >= 0){
		arrSeNum.push(Math.abs(now - arrSrc[left]));
		aver += Math.abs(now - arrSrc[left]);
		now = arrSrc[left];
		arrProc.push(now);
		left--;
	}
	aver /= length;
	// console.log("arrSeNum=="+aver+"\n"+arrProc+"\n"+arrSeNum);

	//最后返回一个，里面包含算法结果的数据结构
	var obj = {
		average : aver,
		arrProc : arrProc,
		arrSeNum : arrSeNum
	}

	return obj;
}